/**
 * 用户服务 - 通过后端接口获取用户信息
 */
import { getCurrentUser as apiGetCurrentUser, getCurrentUserId as apiGetCurrentUserId } from '@/api/acl/user'

// 缓存用户信息和用户ID，避免重复请求
let cachedUser = null
let cachedUserId = null
let userPromise = null
let userIdPromise = null

/**
 * 获取当前用户ID
 * @returns {Promise<string>} 用户ID
 */
export async function getCurrentUserId() {
  // 如果已有缓存的用户ID，直接返回
  if (cachedUserId) {
    return Promise.resolve(cachedUserId)
  }
  
  // 如果正在请求中，等待该请求完成
  if (userIdPromise) {
    return userIdPromise
  }
  
  // 发起新的请求
  userIdPromise = apiGetCurrentUserId().then(response => {
    if (response && response.code === 200 && response.data) {
      cachedUserId = response.data
      return cachedUserId
    } else {
      // 如果获取失败，返回默认值
      console.warn('获取用户ID失败，使用默认值')
      cachedUserId = 'user001'
      return cachedUserId
    }
  }).catch(error => {
    console.error('获取用户ID异常:', error)
    cachedUserId = 'user001'
    return cachedUserId
  }).finally(() => {
    userIdPromise = null
  })
  
  return userIdPromise
}

/**
 * 获取用户信息
 * @returns {Promise<Object>} 用户信息对象
 */
export async function getCurrentUser() {
  // 如果已有缓存的用户信息，直接返回
  if (cachedUser) {
    return Promise.resolve(cachedUser)
  }
  
  // 如果正在请求中，等待该请求完成
  if (userPromise) {
    return userPromise
  }
  
  // 发起新的请求
  userPromise = apiGetCurrentUser().then(response => {
    if (response && response.code === 200 && response.data) {
      cachedUser = response.data
      // 同时更新缓存的用户ID
      cachedUserId = cachedUser.loginName || cachedUser.userSn || cachedUser.id
      return cachedUser
    } else {
      // 如果获取失败，返回默认值
      console.warn('获取用户信息失败，使用默认值')
      cachedUser = {
        id: 'user001',
        loginName: 'user001',
        userName: '测试用户',
        email: 'test@example.com',
        avatar: null
      }
      cachedUserId = 'user001'
      return cachedUser
    }
  }).catch(error => {
    console.error('获取用户信息异常:', error)
    cachedUser = {
      id: 'user001',
      loginName: 'user001',
      userName: '测试用户',
      email: 'test@example.com',
      avatar: null
    }
    cachedUserId = 'user001'
    return cachedUser
  }).finally(() => {
    userPromise = null
  })
  
  return userPromise
}

/**
 * 清除缓存的用户信息
 */
export function clearUserCache() {
  cachedUser = null
  cachedUserId = null
  userPromise = null
  userIdPromise = null
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 总是返回 true（模拟已登录状态）
 */
export function isUserLoggedIn() {
  return true;
}

/**
 * 获取用户权限（模拟）
 * @returns {Array} 权限列表
 */
export function getUserPermissions() {
  return ['chat', 'conversation', 'message'];
}

export default {
  getCurrentUserId,
  getCurrentUser,
  isUserLoggedIn,
  getUserPermissions
};
